# 中文分词工具，将句子拆分成词语序列
import jieba
# 自然语言处理库，提供Word2Vec等词嵌入模型
from gensim.models import Word2Vec
# 数值计算库，用于向量操作
import numpy as np


def tokenize_sentence(sentence: str):
    """将句子分词并返回分词列表"""
    return jieba.lcut(sentence)
# 例如；将"自然语言处理很有趣"，分词，结果是一个列表：['自然语言', '处理', '很', '有趣']

def train_word2vec_model(sentences: list, vector_size=100, min_count=1):
    """训练Word2Vec模型"""
    return Word2Vec(sentences, vector_size=vector_size, min_count=min_count)


def sentence_to_vector(sentence:  str, model: Word2Vec, vector_size:  int):
    """ 将句子转换为向量表示（词向量的平均）"""
    words = tokenize_sentence(sentence) # 分词
    vector = np.zeros(vector_size)  # 初始化全零向量
    word_count = 0 # 记录有效词的数量
    # 遍历句子中的每个词
    for word in words:
        if word in model.wv:  # 检查词是否在词汇表中
            vector += model.wv[word]  # 累加词向量
            word_count += 1

    if word_count > 0:
        vector /= word_count  # 计算平均值

    return vector


# 使用示例
if __name__ == "__main__":
    # 训练数据准备
    sample_sentences = [
        "自然语言处理很有趣",
        "我喜欢学习新的技术",
        "机器学习是人工智能的一个分支"
    ]

    # 数据预处理
    tokenized_sentences = [tokenize_sentence(sent) for sent in sample_sentences]
    # 输出示例：[['自然语言','处理','很','有趣'], ['我','喜欢','学习','新的','技术'], ...]

    # 模型训练
    model = train_word2vec_model(tokenized_sentences, vector_size=50)
    # 此时模型已学习到词语的分布式表示

    # 句子向量化
    test_sentence = "人工智能发展前景广阔"
    vector = sentence_to_vector(test_sentence, model, 50)

    # 结果输出
    print(f"分词结果: {tokenize_sentence(test_sentence)}")
    print(f"向量化结果: {vector}")
    print(f"向量维度: {len(vector)}")